﻿//【初阶】18.list(1)

//【头文件包含】
//C++的主要头文件
#include<iostream>//c++的输入输出流
using std::cout, std::endl, std::cin;
#include<list>
using std::list;
#include"list.h"
//C的主要头文件
//#include<stdio.h>
//#include<stdlib.h>
//#include<assert.h>
//#include<string.h> 




//【命名空间】

//【结构体声明】【类声明】



//【函数声明】
void Test1();void Test2();void Test3();
void print_list(const list<int>& l);
void rprint_list(const list<int>& l);



//【主函数】
int main()
{
	
	Test1();
	Test2();
	Test3();
	
	cout << "****主函数结束****" << endl;
	return 0;
}
void print_list(const list<int>& l)
{
	list<int>::const_iterator it = l.cbegin();
	while (it != l.cend())
	{
		cout << *it << " ";
		++it;
	}
	cout << endl;
}
void rprint_list(const list<int>& l)
{
	list<int>::const_reverse_iterator it = l.crbegin();
	while (it != l.crend())
	{
		cout << *it << " ";
		++it;
	}
	cout << endl;
}

/*测试用例*/void Test1()
{
	cout << "****测试用例开始****"<< endl;
	list<int> l1;
	l1.push_back(1);
	l1.push_back(2);
	l1.push_back(3);
	l1.push_back(4);
	print_list(l1);
	l1.pop_back();
	print_list(l1);
	l1.pop_front();
	print_list(l1);
	l1.push_front(4);
	l1.push_front(1);
	print_list(l1);
	rprint_list(l1);

	list<int>::iterator pos = find(l1.begin(),l1.end(),3);
	if (pos != l1.end())
		l1.insert(pos, 5);
	print_list(l1);
	l1.erase(pos);
	print_list(l1);

	cout << "****测试用例结束****" << endl << endl;
}
/*测试用例*/void Test2()
{
	cout << "****测试用例开始****" << endl;
	myspace::test_list1();
	myspace::test_list2();


	cout << "****测试用例结束****" << endl<<endl;
}

/*测试用例*/void Test3()
{
	cout << "****测试用例开始****" << endl;


	cout << "****测试用例结束****" << endl << endl;
}

//【笔记】
//【初阶】18.list(1)
	//vector的缺点
		//1.头部和中部插入删除效率低
		//2.插入数据空间不足需要增容，开空间、拷贝、释放旧空间 
	//vector的优点
		//1.支持随机访问
		//2.对排序、二分查找、堆等算法友好
	//vector可以理解为C语言学的顺序表  //list可以理解为C语言学的链表
	//list的缺点
		//1.不支持随机访问  
	//list的优点
		//1.头插、中间插效率高
		//2.插入删除数据代价小，只需新增节点或删除节点重新连接
	//list本质是双向循环链表
	//4种迭代器：普通、只读普通、反向、只读反向 
	//迭代器在插入、删除后都有可能导致不同程度的失效，使用时要留意列带去的状态
	//list还支持排序、逆序、转移等相关成员函数
	// list在实现时使用一个类型封装节点的指针构成一个自定义类型然后重载* ++等运算符，实现迭代器







